package aplicacion;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;

import utilidades.Validador;
import net.miginfocom.swing.MigLayout;
import dominio.Avion;

@SuppressWarnings("serial")
public class MenuAvion extends JPanel {
	private JPanel panelIzquierda;
	private JPanel panelCentro;
	private JPanel panelArriba;
	private JTable table;

	MenuAvion(final MenuPrincipal menuPrincipal){
		setLayout( new BorderLayout() );
		cargarPanelArriba();
		cargarPanelIzquierda(menuPrincipal);
		cargarPanelCentro();
	}

	public void cargarPanelArriba(){
		JTextField txtTxtbuscar = new JTextField();
		txtTxtbuscar.setPreferredSize(new Dimension(4, 25));
		txtTxtbuscar.setColumns(10);
		
		panelArriba = new JPanel();
		panelArriba.setLayout(new MigLayout("", "[grow][]", "[]"));
		panelArriba.add(txtTxtbuscar, "cell 0 0,growx");
		{
			JButton btbBuscar = new JButton("Buscar");
			btbBuscar.setIcon(new ImageIcon(MenuCliente.class.getResource(
					"/aplicacion/imagenes/buscar.png")));
			panelArriba.add(btbBuscar, "cell 1 0,alignx right");
			
		}
		add(panelArriba, BorderLayout.NORTH);
	}
		
	public void cargarPanelIzquierda(final MenuPrincipal menuPrincipal){
		panelIzquierda = new JPanel();
		panelIzquierda.setLayout(new MigLayout());
		{
			JButton btbAgregar = new JButton("Agregar");
			
			btbAgregar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					MenuAgregarAvion menuAgregarAvion = new MenuAgregarAvion(menuPrincipal);
					menuAgregarAvion.setVisible(true);
					menuPrincipal.menuAvion.remove(panelCentro);
					menuPrincipal.menuAvion.cargarPanelCentro();
					menuPrincipal.menuAvion.panelCentro.revalidate();
					menuPrincipal.menuAvion.panelCentro.repaint();
				}
			});
			btbAgregar.setIconTextGap(12);
			btbAgregar.setHorizontalAlignment(SwingConstants.LEFT);
			btbAgregar.setHorizontalTextPosition(SwingConstants.LEFT);
			btbAgregar.setIcon(new ImageIcon(MenuCliente.class.getResource(
					"/aplicacion/imagenes/agregar_paquete.png")));
			panelIzquierda.add(btbAgregar, "cell 0 0,growx,aligny top");
			
			JButton btbModificar = new JButton("Modificar");
			btbModificar.setHorizontalAlignment(SwingConstants.LEFT);
			btbModificar.setHorizontalTextPosition(SwingConstants.LEFT);
			btbModificar.setIcon(new ImageIcon(MenuCliente.class.getResource(
					"/aplicacion/imagenes/modificar_cliente.png")));
			panelIzquierda.add(btbModificar, "cell 0 1,alignx left,growy");

			JButton btbEliminar = new JButton("Eliminar");
			btbEliminar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					int[] selectedRow = table.getSelectedRows();
					for (int i : selectedRow){
						i = table.convertRowIndexToModel(i);
						String id = (String)table.getModel().getValueAt(i, 0);
						System.out.println(id);
					}
				}
			});
			btbEliminar.setIconTextGap(12);
			btbEliminar.setHorizontalAlignment(SwingConstants.LEFT);
			btbEliminar.setHorizontalTextPosition(SwingConstants.LEFT);
			btbEliminar.setIcon(new ImageIcon(MenuCliente.class.getResource(
					"/aplicacion/imagenes/borrar_paquete.png")));
			panelIzquierda.add(btbEliminar, "cell 0 2,grow");
		}	
		add(panelIzquierda, BorderLayout.WEST);
	}
	
	
	public void cargarPanelCentro(){
		panelCentro = new JPanel();
		panelCentro.setLayout( new GridLayout() );
		add(panelCentro, BorderLayout.CENTER);
		String[] columnas = {"ID Avion","Marca","Modelo","Capacidad",};
		table = new JTable(new DefaultTableModel(null, columnas){
		    public boolean isCellEditable(int row, int column)
		    {
		      return false;//para que no se puedan editar las celdas
		    }
		});
		try {
			agregarFilas();
		} catch (Exception e) {
			e.printStackTrace();
		}
		JScrollPane scrollPane = new JScrollPane(table);
		panelCentro.add(scrollPane);		
	}
	
	void agregarFilas() throws ClassNotFoundException, SQLException{
		List<Avion> aviones = new ArrayList<Avion>();
		aviones = new Avion().leerRegistrosBD();
		DefaultTableModel defaultModel = (DefaultTableModel) table.getModel();
		for (Avion a : aviones){
		defaultModel.addRow(new Object[]{a.getIdAvion().toString(), a.getMarcaAvion(),
				a.getModeloAvion(), a.getCapacidadAvion().toString()});
		}
		table = new JTable(defaultModel);
	}

	public JPanel getPanel() {
		return this;
	}
}

@SuppressWarnings("serial")
class MenuAgregarAvion extends JDialog {
	private JTextField txtMarca;
	private JTextField txtModelo;
	private JTextField txtCapacidad;
	
	MenuAgregarAvion(MenuPrincipal menuPrincipal){
		super(menuPrincipal, true);
		setTitle("Agregar avion");
		setSize(350, 200);
		setLocationRelativeTo(menuPrincipal);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		getContentPane().setLayout(new MigLayout());
		
		JLabel lblMarca = new JLabel("Marca:");
		txtMarca = new JTextField();
		txtMarca.setMinimumSize(new Dimension(200,25));
		add(lblMarca, "cell 0 0");
		add(txtMarca, "cell 1 0, growx");		
		
		JLabel lblModelo = new JLabel("Modelo:");
		txtModelo = new JTextField();
		txtModelo.setMinimumSize(new Dimension(50,25));
		add(lblModelo, "cell 0 1");
		add(txtModelo, "cell 1 1, growx");

	
		JLabel lblCapacidad = new JLabel("Capacidad:");	
		txtCapacidad = new JTextField();
		txtCapacidad.setMinimumSize(new Dimension(50,25));
		add(lblCapacidad, "cell 0 2");
		add(txtCapacidad, "cell 1 2, growx");
		
	
		JButton btbAgregar = new JButton("Agregar");
		btbAgregar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(validarAvion())
					try {
						guardarAvion();
						JOptionPane.showMessageDialog(null, "Avion agreado correctamente.", 
								null, JOptionPane.INFORMATION_MESSAGE);
						MenuAgregarAvion.this.dispose();
					} catch (SQLException e) {
						e.printStackTrace();
					}
			}
		});
		add(btbAgregar, "cell 1 3, growx");
		pack();
		setResizable(false);	
	}
	

	boolean validarAvion(){
		try {
			Validador.validarTexto(txtMarca.getText(), "Marca");
			Validador.validarTexto(txtModelo.getText(), "Modelo");
			Validador.validarNumero(txtCapacidad.getText(), "Capacidad");	
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), null, JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
	}
	
	void guardarAvion() throws SQLException {
		Avion avion = new Avion();
		avion.setMarcaAvion(txtMarca.getText());
		avion.setModeloAvion(txtModelo.getText());
		avion.setCapacidadAvion(new Integer(txtCapacidad.getText()));
		avion.guardarRegistroBd();
	}
}